package com.ruoyi.common.utils;

import com.freewayso.image.combiner.ImageCombiner;
import com.freewayso.image.combiner.enums.OutputFormat;
import com.freewayso.image.combiner.enums.ZoomMode;

import java.awt.*;

/**
 * 生成海报工具类
 */
public class ImageCombineUtils {
    /**
     *  生成全参数海报
     * @param qrCodeUrl
     * @param title
     * @param content
     * @return
     * @throws Exception
     */
    public static ImageCombiner createSharePoster(String qrCodeUrl,String title,String content ) throws Exception {
        //String qrCodeUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQFw8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAybjVrdEo0N1hjTEMxYkludnhBY1cAAgTsCvhjAwQAjScA";

        String bgImageUrl = "https://img.thebeastshop.com/combine_image/funny_topic/resource/bg_3x4.png";
        String productImageUrl = "http://sucai.laixuexi.cc:88/img2019/soft/2019/09/14/195712_14129153.jpg";
        //背景图（测试url形式）
        // String qrCodeUrl = "http://imgtest.thebeastshop.com/file/combine_image/qrcodef3d132b46b474fe7a9cc6e76a511dfd5.jpg";     //二维码
        // String productImageUrl = "https://img.thebeastshop.com/combine_image/funny_topic/resource/product_3x4.png";             //商品图
        // BufferedImage waterMark = ImageIO.read(new URL("https://img.thebeastshop.com/combine_image/funny_topic/resource/water_mark.png"));  //水印图（测试BufferedImage形式）
        // BufferedImage avatar = ImageIO.read(new URL("https://img.thebeastshop.com/member/privilege/level-icon/level-three.jpg"));           //头像
        // String title = "欢迎体验亚尔科技AI";                                       //标题文本
        // String content = "使用GPT3.5-Turbo接口";  //内容文本

        //合成器和背景图（整个图片的宽高和相关计算依赖于背景图，所以背景图的大小是个基准）
        ImageCombiner combiner = new ImageCombiner(bgImageUrl, OutputFormat.PNG);
        combiner.setBackgroundBlur(30);     //设置背景高斯模糊（毛玻璃效果）
        combiner.setCanvasRoundCorner(100); //设置整图圆角（输出格式必须为PNG）

        //商品图（设置坐标、宽高和缩放模式，若按宽度缩放，则高度按比例自动计算）
        combiner.addImageElement(productImageUrl, 0, 160, 837, 0, ZoomMode.Width)
            .setRoundCorner(46)     //设置圆角
            .setCenter(true);       //居中绘制，会忽略x坐标参数，改为自动计算

        //标题（默认字体为“阿里巴巴普惠体”，也可以自己指定字体名称或Font对象）
        combiner.addTextElement(title, 55, 150, 1400);

        //内容（设置文本自动换行，需要指定最大宽度（超出则换行）、最大行数（超出则丢弃）、行高）
        combiner.addTextElement(content, "微软雅黑", 40, 150, 1480)
            .setAutoBreakLine(837, 2, 60)
            .setColor(255,152,13);

        //头像（圆角设置一定的大小，可以把头像变成圆的）
//        combiner.addImageElement(avatar, 200, 1200, 130, 130, ZoomMode.WidthHeight)
//                .setRoundCorner(200)
//                .setBlur(5);       //高斯模糊，毛玻璃效果

        //水印（设置透明度，0.0~1.0）
//        combiner.addImageElement(waterMark, 630, 1200)
//                .setAlpha(.8f)      //透明度，0.0~1.0
//                .setRotate(15);     //旋转，0~360，按中心点旋转

        //二维码（强制按指定宽度、高度缩放）
        combiner.addImageElement(qrCodeUrl, 138, 1707, 186, 186, ZoomMode.WidthHeight);

        //元素对象也可以直接new，然后手动加入待绘制列表
//        TextElement textPrice = new TextElement("￥1290", 40, 600, 1400);
//        textPrice.setStrikeThrough(true);       //删除线
//        combiner.addElement(textPrice);         //加入待绘制集合

        //动态计算位置
//        int offsetPrice = textPrice.getX() + textPrice.getWidth() + 10;
//        combiner.addTextElement("￥999", 60, offsetPrice, 1400)
//                .setColor(Color.red);

        //执行图片合并
        combiner.combine();

        return combiner;
        //保存文件
        //combiner.save("/Users/ztx/Downloads/qccode.jpg");
        //或者获取流（并上传oss等）
        //InputStream is = combiner.getCombinedImageStream();
        //String url = ossUtil.upload(is);
    }
}
